import { defaultValue } from '../Source/Cesium.js';
import { getTimestamp } from '../Source/Cesium.js';
import { when } from '../Source/Cesium.js';

    function pollToPromise(f, options) {
        options = defaultValue(options, defaultValue.EMPTY_OBJECT);

        var pollInterval = defaultValue(options.pollInterval, 1);
        var timeout = defaultValue(options.timeout, 5000);

        var deferred = when.defer();

        var startTimestamp = getTimestamp();
        var endTimestamp = startTimestamp + timeout;

        function poller() {
            var result = false;
            try {
                result = f();
            }
            catch (e) {
                deferred.reject(e);
                return;
            }

            if (result) {
                deferred.resolve();
            } else if (getTimestamp() > endTimestamp) {
                deferred.reject();
            } else {
                setTimeout(poller, pollInterval);
            }
        }

        poller();

        return deferred.promise;
    }
export default pollToPromise;
